<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //         如何实现一个无限累加的 sum 函数
        // 更多描述 实现一个 sum 函数如下所示：

        //             sum(1, 2, 3).valueOf(); //6
        //             sum(2, 3)(2).valueOf(); //7
        //             sum(1)(2)(3)(4).valueOf(); //10
        //             sum(2)(4, 1)(2).valueOf(); //9
        //             sum(1)(2)(3)(4)(5)(6).valueOf(); // 21
        //             追问:

        // 如果不使用 valueOf，可直接进行计算，如下示例，应如何处理。

        //             //=> 15
        //             sum(1, 2, 3) + sum(4, 5);

        //             //=> 100
        //             sum(10) * sum(10);

        // function sum(...args) {
        //     const f = (...rest) => sum(...args, ...rest);
        //     f.valueOf = () => args.reduce((x, y) => x + y, 0);
        //     return f;
        // }

        // 追问
        function sum(...args) {
            const foo = (...rest) => sum(...args, ...rest);
            foo.toString = () => args.reduce((x, y) => x + y, 0);
            return foo;
        }
        console.log(sum(1)(2, 3) + sum(1)); // 7
        console.log(sum(10) * sum(10)); // 100
    </script>
</body>

</html>